package com.zeratul.common.event.base.interceptor;

import com.zeratul.common.event.domain.ZtEvent;

/**
 * 发布者事件拦截器
 */
public interface BasePublishInterceptor {

    /**
     * 判断当前的拦截器 是否需要对当前消息进行拦截
     * @param ztEvent
     *  如果返回true，则拦截器的interceptor 就会触发，如果false则跳过当前拦截器
     */
    <T> boolean isSupport(ZtEvent<T> ztEvent);

    /**
     * 发送端拦截方法
     * @param ztEvent 需要处理的消息对象
     *  处理过的消息对象 如果返回null, 则表示中断当前消息的发送
     */
    <T> ZtEvent<T> interceptor(ZtEvent<T> ztEvent);
}
